package com.yk;

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

public class Selenimu3 {
    public static void main(String[] args) {
        WebDriverManager.chromedriver().setup();
        WebDriver driver = new ChromeDriver();
        try {
            driver.get("https://www.imooc.com/");
            // 使用显式等待,等待元素可点击
            WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(3));
            // 尝试关闭可能的广告弹窗，但如果不存在则忽略
            // 为第一个元素（广告弹窗关闭按钮）添加了 try-catch 块，这样即使找不到该元素也不会导致程序崩溃
            try {
                wait.until(ExpectedConditions.elementToBeClickable(By.id("js-advpop-close"))).click();
                // 在关闭弹窗后添加了短暂等待，确保弹窗完全关闭
                Thread.sleep(1000);
            } catch (Exception e) {
                // 如果没有广告弹窗，继续执行
                System.out.println("没有找到广告弹窗，忽略...");
            }



            //十大元素定位
//            driver.findElement(By.id("js-signin-btn")).click();
//            添加了 WebDriverWait 和 ExpectedConditions 的导入
//            创建了 WebDriverWait 对象，设置最大等待时间为10秒
//            使用 ExpectedConditions.elementToBeClickable() 方法等待元素可点击后再执行点击操作
//            这种方法比简单的 Thread.sleep() 更可靠，因为它会智能地等待元素变为可交互状态，而不是盲目地等待固定时间。如果元素在指定时间内变为可交互，测试将继续执行；如果超时，将抛出 TimeoutException 异常，这比 ElementNotInteractableException 更容易理解和调试。
            // 等待并点击登录按钮
            wait.until(ExpectedConditions.elementToBeClickable(By.id("js-signin-btn"))).click();

        } finally {
            System.out.println("关闭浏览器...");
//            driver.quit();
            System.out.println("浏览器已关闭!");
        }
    }
}
